package com.example.smartagrisys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartagrisys.entity.Notification;

import java.util.List;

/**
 * 消息通知服务接口
 */
public interface NotificationService extends IService<Notification> {

    /**
     * 获取用户的消息列表
     *
     * @param userId 用户ID
     * @return 消息列表
     */
    List<Notification> getUserNotifications(Long userId);

    /**
     * 获取用户未读消息数量
     *
     * @param userId 用户ID
     * @return 未读消息数量
     */
    int countUnreadNotifications(Long userId);

    /**
     * 标记消息为已读
     *
     * @param notificationId 消息ID
     * @param userId         用户ID
     * @return 是否成功
     */
    boolean markAsRead(Long notificationId, Long userId);

    /**
     * 标记所有消息为已读
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean markAllAsRead(Long userId);

    /**
     * 删除消息
     *
     * @param notificationId 消息ID
     * @param userId         用户ID
     * @return 是否成功
     */
    boolean deleteNotification(Long notificationId, Long userId);

    /**
     * 清空用户的所有消息
     *
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean clearAllNotifications(Long userId);

    /**
     * 创建系统通知
     *
     * @param userId  用户ID
     * @param title   标题
     * @param content 内容
     * @param type    类型
     * @return 创建的消息
     */
    Notification createSystemNotification(Long userId, String title, String content, String type);

    /**
     * 创建带操作的通知
     *
     * @param userId      用户ID
     * @param title       标题
     * @param content     内容
     * @param type        类型
     * @param actionRoute 关联路由
     * @param actionText  操作文本
     * @param actionType  操作类型
     * @return 创建的消息
     */
    Notification createActionNotification(Long userId, String title, String content, String type,
                                         String actionRoute, String actionText, String actionType);
} 